/**
 * unit，该工具封装了 Golang 切片的常用非官方方法
 * 创建者：Bryce
 * 创建时间：20210901
 */
package unit

/**
 * UniqueIntSlice，int 整形切片去重
 * Params：
 *   slice：int 类型切片
 * Return：
 *   去重后的 int 类型切片
 */
func UniqueIntSlice(slice []int) []int {
	m := make(map[int]int, 0)
	s := make([]int, 0)
	for _, v := range slice {
		if m[v] == 0 {
			m[v] = 1
			s = append(s, v)
		}
	}
	return s
}

/**
 * UniqueInt64Slice，int64 整形切片去重
 * Params：
 *   slice：int64 类型切片
 * Return：
 *   去重后的 int64 类型切片
 */
func UniqueInt64Slice(slice []int64) []int64 {
	m := make(map[int64]int, 0)
	s := make([]int64, 0)
	for _, v := range slice {
		if m[v] == 0 {
			m[v] = 1
			s = append(s, v)
		}
	}
	return s
}

/**
 * UniqueStringSlice，字符串切片去重
 * Params：
 *   slice：字符串类型切片
 * Return：
 *   去重后的字符串类型切片
 */
func UniqueStringSlice(slice []string) []string {
	m := make(map[string]int, 0)
	s := make([]string, 0)
	for _, v := range slice {
		if m[v] == 0 {
			m[v] = 1
			s = append(s, v)
		}
	}
	return s
}

/**
 * OneofIntSlice，int 整形切片校验某个值是否存在
 * Params：
 *   value：int 值
 *   slice：int 类型切片
 * Return：
 *   存在判断结果，true-存在，false-不存在
 */
func OneofIntSlice(value int, slice []int) bool {
	for _, v := range slice {
		if v == value {
			return true
		}
	}
	return false
}

/**
 * OneofInt64Slice，int 整形切片校验某个值是否存在
 * Params：
 *   value：int64 值
 *   slice：int64 类型切片
 * Return：
 *   存在判断结果，true-存在，false-不存在
 */
func OneofInt64Slice(value int64, slice []int64) bool {
	for _, v := range slice {
		if v == value {
			return true
		}
	}
	return false
}

/**
 * OneofStringSlice，String 整形切片校验某个值是否存在
 * Params：
 *   value：String 值
 *   slice：String 类型切片
 * Return：
 *   存在判断结果，true-存在，false-不存在
 */
func OneofStringSlice(value string, slice []string) bool {
	for _, v := range slice {
		if v == value {
			return true
		}
	}
	return false
}
